1 module hip.api.audio.audiosource; 2 3 public import hip.api.audio.audioclip; 4 5 abstract class AHipAudioSource 6 { 7 protected IHipAudioClip _clip; 8 9 IHipAudioClip clip(){return _clip;} 10 IHipAudioClip clip(IHipAudioClip newClip){return _clip = newClip;} 11 12 protected bool isDirty; 13 protected bool _loop; 14 bool isPlaying; 15 bool isPaused; 16 17 protected float _time = 0; 18 protected float _length = -1; 19 protected float _pitch = 1; 20 protected float _panning = 0; 21 protected float _volume = 1; 22 protected float[3] _position = [0,0,0]; 23 24 25 26 final float length() const => _length; 27 final float time() const => _time; 28 final float pitch() const => _pitch; 29 final float panning() const => _panning; 30 final float volume() const => _volume; 31 final bool loop() const => _loop; 32 33 34 35 float length(float value) => _length = value; 36 float time(float value) => _time = value; 37 38 float pitch(float value) 39 in(value != float.nan) 40 { 41 isDirty = isDirty || pitch != value; 42 return _pitch = value; 43 } 44 45 float panning(float value) 46 in(value >= -1 && value <= 1) 47 { 48 isDirty = isDirty || panning != value; 49 return _panning = value; 50 } 51 float volume(float value) 52 in(value != float.nan) 53 { 54 isDirty = isDirty || pitch != value; 55 return _volume = value; 56 } 57 58 float[3] position() => _position; 59 float[3] position(float[3] value) 60 { 61 isDirty = isDirty || position != value; 62 return _position = value; 63 } 64 65 bool loop(bool value) 66 { 67 isDirty = isDirty || _loop != value; 68 return _loop = value; 69 } 70 71 72 bool play() 73 { 74 isPlaying = true; 75 return false; 76 } 77 bool stop() 78 { 79 isPlaying = false; 80 return false; 81 } 82 bool pause() 83 { 84 isPaused = true; 85 return false; 86 } 87 bool play_streamed() => false; 88 89 90 abstract float getProgress(); 91 abstract AHipAudioSource clean(); 92 abstract void pullStreamData(); 93 abstract void* getFreeBuffer(); 94 95 96 97 98 99 //3D Audio Only 100 float maxDistance = 0; 101 float rolloffFactor = 0; 102 float referenceDistance = 0; 103 }